package com.rockcent.mall.lib.repository;

import com.rockcent.common.common.PageResult;
import com.rockcent.common.domain.enumclass.Whether;
import com.rockcent.mall.lib.domain.Merchant;
import com.rockcent.mall.lib.domain.Product;
import com.rockcent.mall.lib.domain.ProductEvent;
import com.rockcent.mall.lib.domain.enumclass.ProductClientType;
import com.rockcent.mall.lib.domain.enumclass.ProductStatus;
import com.rockcent.mall.lib.dto.MerchantDto;
import com.rockcent.mall.lib.dto.ProductDto;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * Created by DK on 16/9/18.
 * 产品管理
 */
@Repository
public interface MerchantProductRepositoryCustom {
    /**
     * 产品管理 分页
     */
    PageResult<ProductDto> findMerchantProductPage(String productType, String status, String type, String keyword, String sort, String sortByName, Long merchantId, Long marketMerchantId, PageResult page);

    /**
     * 分销市场产品列表
     */
    PageResult<ProductDto> findSaleMarketPage(String keyword, String type, List<Long> categoryIds, String sortByName, String sort, String showSaleProduct, Long merchantId, Long mallId, PageResult page);

    /**
     * 产品搜索功能 heweiping
     */
    PageResult<Product> searchProduct(ProductDto productDto, Long mallId, ProductStatus status, String keyword, PageResult pageResult);

    /**
     * 商家下的搜索
     */
    PageResult<Product> merchantSearch(ProductDto productDto, ProductStatus status, String keyword, PageResult pageResult);


    /**
     * 通过渠道获取商品
     */
    PageResult<ProductDto> getChannelProduct(Long channel, PageResult pageResult);

    /**
     * 产品管理列表搜索条件相关联商家
     *
     * @param merchantId 商家id
     * @return
     */
    List<MerchantDto> findProductRelateMerchant(Long merchantId, String status);

    /**
     * 产品礼包我的产品 分页
     *
     * @param merchantId        商家ID
     * @param type              产品类型 商品  服务
     * @param productSourceType 产品来源 自营 分销
     * @param sort              排序
     * @param sortByName        排序字段
     * @param keyword           名称/编号
     * @param dateEnabled       礼包开始时间
     * @param dateDisabled      礼包结束时间
     * @param maxPrice          最大售价
     * @param minPrice          最小售价
     * @param categoryIds       品类
     * @param pageResult        分页
     * @return
     */
    PageResult<ProductDto> findGiftPacketProductPage(Long merchantId, Long productId, String type, String productSourceType, String sort, String sortByName, String keyword, Date dateEnabled, Date dateDisabled, String maxPrice, String minPrice, List<Long> categoryIds, PageResult pageResult);

    /**
     * 产品礼包分销市场产品 分页
     *
     * @param mallId       商城ID
     * @param type         产品类型 商品  服务
     * @param sort         排序
     * @param sortByName   排序字段
     * @param keyword      名称/编号
     * @param dateEnabled  礼包开始时间
     * @param dateDisabled 礼包结束时间
     * @param maxPrice     最大售价
     * @param minPrice     最小售价
     * @param categoryIds  品类
     * @param pageResult   分页
     * @return
     */
    PageResult<ProductDto> findGiftPacketMarketProductPage(Long merchantId, Long mallId, Long productId, String type, String sort, String sortByName, String keyword, Date dateEnabled, Date dateDisabled, String maxPrice, String minPrice, List<Long> categoryIds, PageResult pageResult);

    /**
     * 根据ids查询产品
     *
     * @param productIds 产品ids
     * @return
     */
    List<Merchant> findByProductIds(List<Long> productIds);

    PageResult<Product> getProductListToMem(List<Long> productIdList, Long mallId, Long merchantId, ProductDto productDto, PageResult pageResult);

    PageResult<Product> getProductListPageResult(ProductDto productDto, PageResult pageResult);

    PageResult<Product> getAdvisingProduct(ProductDto productDto, PageResult pageResult);

    /**
     * 订单清单 获取订单内产品的商家
     */
    PageResult<Merchant> getOrderProductMerchant(List<Long> productIdList, PageResult pageResult);

    PageResult<Product> getMerchantLatestProducts(Long mallId, Long merchantId, PageResult pageResult);

    PageResult<Product> findByIdInAndIsDeletePage(List<Long> productIdList, Long mallId, Whether isDelete, PageResult pageResult);

    Long getProductWithVerifyStatus(Long mallId, Long merchantId, ProductStatus status);

    PageResult<ProductDto> findProductIncomeCollectPage(String productSource, String productType, String beginDate, String endDate, String keyword, Boolean refundable, Long id, Long id1, PageResult page);

    Long getLatestProductCountStatisticsYesterDay(Long mallId, Long merchantId);

    Long getProductFavoriteCountStatisticsYesterDay(Long mallId, Long merchantId);

    Long getLatestBuyProductCountStatisticsYesterDay(Long mallId, Long merchantId);

    Long getNewProductViewCountStatisticsYesterDay(Long mallId, Long merchantId);

    List getTop3SellingList(Long mallId, Long merchantId);

    //查询商铺的商品
    PageResult findByMerchantPage(Long merchantId, Whether isDelete, ProductStatus status, PageResult pageResult);


    List<ProductDto> findIncomeCollectSum(String productSource, String productType, String beginDate, String endDate, String keyword, Boolean refundable, Long mallId, Long merchantId);

    List<Long> findAllSoldoutProductIds();

    PageResult<Product> findProductByTopicIdPage(Long id, PageResult page);


    Product queryByMarketIdAndMerchantIdAndIsDeleteNotInExpired(Long marketId, Long distributorMerchantId, Whether no);

    //订单产品评价统计 分页
    PageResult<ProductDto> findProductEvaluationStatisticsPage(Long mallId, Long merchantId, String productSourceType, String keyword, String sortByName, String sort, PageResult page);

    List<ProductDto> findAllByIds(List<Long> ids);

    PageResult<Product> findByMallIdAndIsDeleteOrderByIdDescPage(Long mallId, Whether no, PageResult page);

    PageResult<ProductDto> findProducts(Long mallId, String type, String productSourceType, String merchantName, String keyword, List<Long> categoryIds, PageResult pageResult, ProductClientType productClientType, String sortByName, String sort);
}
